solc-0.8.35 0x000000000004444c5dc75cb358380d2e3de08a90 optimized-low-runs

20021 bytes

60806040526004361061017c575f3560e01c8062fdd58e1461018057806301ffc9a7146101c9578063095bcdb6146101f85780630b0d9c091461021757806311da60b414610238578063156e29f6146102405780631e2eaeaf1461025f578063234266d71461027e5780632d7713891461029d57806335fd631a146102bc5780633dd45adb146102e8578063426a8493146102fb57806348c894911461031a5780635275965114610346578063558a729714610365578063598af9e7146103845780635a6bcfda146103c05780636276cbbe146103f45780637e87ce7d1461042657806380f0b44c146104455780638161b874146104645780638da5cb5b1461048357806397e8cd4e146104ae5780639bf6645f146104d9578063a5841194146104f8578063b6363cf214610517578063dbd035ff14610550578063f02de3b21461056f578063f135baaa1461058e578063f2fde38b146105ad578063f3cd914c146105cc578063f5298aca146105eb578063fe99049a1461060a575b5f5ffd5b34801561018b575f5ffd5b506101b661019a366004614262565b600460209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156101d4575f5ffd5b506101e86101e336600461428c565b610629565b60405190151581526020016101c0565b348015610203575f5ffd5b506101e86102123660046142b3565b61065f565b348015610222575f5ffd5b506102366102313660046142e5565b61070e565b005b6101b6610758565b34801561024b575f5ffd5b5061023661025a3660046142b3565b610783565b34801561026a575f5ffd5b506101b6610279366004614323565b6107cf565b348015610289575f5ffd5b506101b66102983660046144a2565b6107d9565b3480156102a8575f5ffd5b506102366102b7366004614506565b6108af565b3480156102c7575f5ffd5b506102db6102d6366004614521565b61092a565b6040516101c09190614541565b6101b66102f6366004614506565b610967565b348015610306575f5ffd5b506101e86103153660046142b3565b610992565b348015610325575f5ffd5b50610339610334366004614583565b6109f6565b6040516101c091906145c1565b348015610351575f5ffd5b506102366103603660046145f6565b610ab2565b348015610370575f5ffd5b506101e861037f366004614637565b610b24565b34801561038f575f5ffd5b506101b661039e3660046142e5565b600560209081525f938452604080852082529284528284209052825290205481565b3480156103cb575f5ffd5b506103df6103da366004614661565b610b93565b604080519283526020830191909152016101c0565b3480156103ff575f5ffd5b5061041361040e366004614703565b610d2a565b60405160029190910b81526020016101c0565b348015610431575f5ffd5b506102366104403660046145f6565b610f02565b348015610450575f5ffd5b5061023661045f366004614262565b610fa9565b34801561046f575f5ffd5b506101b661047e3660046142e5565b61100e565b34801561048e575f5ffd5b505f546104a1906001600160a01b031681565b6040516101c09190614739565b3480156104b9575f5ffd5b506101b66104c8366004614506565b60016020525f908152604090205481565b3480156104e4575f5ffd5b506102db6104f336600461474d565b6110e9565b348015610503575f5ffd5b50610236610512366004614506565b611122565b348015610522575f5ffd5b506101e86105313660046147bc565b600360209081525f928352604080842090915290825290205460ff1681565b34801561055b575f5ffd5b506102db61056a36600461474d565b611167565b34801561057a575f5ffd5b506002546104a1906001600160a01b031681565b348015610599575f5ffd5b506101b66105a8366004614323565b61119e565b3480156105b8575f5ffd5b506102366105c7366004614506565b6111a8565b3480156105d7575f5ffd5b506101b66105e63660046147e8565b61121b565b3480156105f6575f5ffd5b506102366106053660046142b3565b611359565b348015610615575f5ffd5b506101e8610624366004614886565b6113a5565b5f6301ffc9a760e01b6001600160e01b0319831614806106595750630f632fb360e01b6001600160e01b03198316145b92915050565b335f90815260046020908152604080832085845290915281208054839190839061068a9084906148dd565b90915550506001600160a01b0384165f908152600460209081526040808320868452909152812080548492906106c19084906148f0565b9250508190555082846001600160a01b0316336001600160a01b03165f516020614db55f395f51905f5233866040516106fb929190614903565b60405180910390a45060015b9392505050565b610716611509565b61072a5761072a6354e3ca0d60e01b61151b565b61073f8361073783611523565b5f0333611543565b6107536001600160a01b0384168383611596565b505050565b5f610761611509565b610775576107756354e3ca0d60e01b61151b565b61077e3361163e565b905090565b61078b611509565b61079f5761079f6354e3ca0d60e01b61151b565b816107ad8161073784611523565b6107c9846107c3836001600160a01b03166116d3565b846116df565b50505050565b5f81545f5260205ff35b5f6107e2611509565b6107f6576107f66354e3ca0d60e01b61151b565b6107fe611758565b60a086205f61080c8261179a565b9050610817816117aa565b6080880151610833906001600160a01b031689898989896117d4565b61083e818888611861565b925061084b8884336118f4565b6040805188815260208101889052339184917f29ef05caaff9404b7cb6d1c0e9bbae9eaa7ab2541feba1a9c4248594c08156cb910160405180910390a360808801516108a4906001600160a01b0316898989898961191c565b505095945050505050565b5f546001600160a01b031633146108e15760405162461bcd60e51b81526004016108d89061491c565b60405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517fb4bd8ef53df690b9943d3318996006dbb82a25f54719d8c8035b516a2a5b8acc905f90a250565b6060604051808360051b6020835284602084015260408301925080830190505b8554835260208301925060018601955080831061094a5781810382f35b5f610970611509565b610984576109846354e3ca0d60e01b61151b565b6106598261163e565b919050565b335f8181526005602090815260408083206001600160a01b03881680855290835281842087855290925280832085905551919285927fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a7906106fb9087815260200190565b6060610a00611509565b15610a1557610a156328486b6360e11b61151b565b610a1d61199e565b6040516348eeb9a360e11b815233906391dd734690610a42908690869060040161496a565b5f604051808303815f875af1158015610a5d573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a84919081019061497d565b90505f516020614e155f395f51905f525c15610aaa57610aaa635212cba160e01b61151b565b6106596119b1565b610ac4826040015162ffffff166119c3565b1580610ae6575081608001516001600160a01b0316336001600160a01b031614155b15610afb57610afb6330d2164160e01b61151b565b610b098162ffffff166119d0565b60a082205f81815260066020526040902061075390836119f6565b335f8181526003602090815260408083206001600160a01b038716808552908352818420805460ff191687151590811790915591519182529293917fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa267910160405180910390a350600192915050565b5f5f610b9d611509565b610bb157610bb16354e3ca0d60e01b61151b565b610bb9611758565b60a086205f610bc78261179a565b9050610bd2816117aa565b6080880151610bed906001600160a01b031689898989611a11565b5f610c546040518060c00160405280336001600160a01b031681526020018a5f015160020b81526020018a6020015160020b8152602001610c318b60400151611b2d565b600f0b81526060808d015160020b60208301528b01516040909101528390611b49565b94509050610c628185611e80565b94505050336001600160a01b0316817ff208f4912782fd25c7f114ca3723a2d5dd6f3bcc3ac8db5af63baa85f711d5ec885f015189602001518a604001518b60600151604051610cd39493929190600294850b81529290930b60208301526040820152606081019190915260800190565b60405180910390a360808701515f90610cfa906001600160a01b0316898987878b8b611eb3565b90945090508015610d1457610d1488828a608001516118f4565b610d1f8885336118f4565b505094509492505050565b5f610d33611758565b6060830151617fff60029190910b1315610d5e576060830151610d5e906316e0049f60e31b9061200e565b600160020b836060015160020b1215610d88576060830151610d8890631d3d20b160e31b9061200e565b825160208401516001600160a01b03908116911610610dba5782516020840151610dba916306e6c98360e41b9161201d565b610dde836040015184608001516001600160a01b031661204690919063ffffffff16565b610df9576080830151610df990630732d7b560e51b9061217e565b5f610e0c846040015162ffffff16612193565b6080850151909150610e28906001600160a01b031685856121bc565b60a084205f818152600660205260409020610e44908584612239565b925084602001516001600160a01b0316855f01516001600160a01b0316827fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d6438886040015189606001518a608001518a8a604051610ed895949392919062ffffff959095168552600293840b60208601526001600160a01b03928316604086015291166060840152900b608082015260a00190565b60405180910390a46080850151610efa906001600160a01b0316868686612297565b505092915050565b6002546001600160a01b03163314610f2457610f246348f5c3ed60e01b61151b565b6103e9610fff821610623e900062fff00083161016610f5357610f5363a7abe2f760e01b62ffffff831661217e565b60a08220610f6a82610f648361179a565b90612316565b60405162ffffff8316815281907fe9c42593e71f84403b84352cd168d693e2c9fcd1fdbcc3feb21d92b43e6696f99060200160405180910390a2505050565b610fb1611509565b610fc557610fc56354e3ca0d60e01b61151b565b5f610fd96001600160a01b0384163361233d565b90505f610fe583611523565b90508181600f0b146110015761100163bda73abf60e01b61151b565b6107c984825f0333611543565b6002545f906001600160a01b03163314611032576110326348f5c3ed60e01b61151b565b611044836001600160a01b0316612352565b158015611069575061106961105761235f565b846001600160a01b0390811691161490565b1561107e5761107e6318f3cb2960e31b61151b565b811561108a57816110a3565b6001600160a01b0383165f908152600160205260409020545b6001600160a01b0384165f908152600160205260408120805492935083929091906110cf9084906148dd565b9091555061070790506001600160a01b0384168583611596565b606060405180602082528360208301526040820191508360051b8201855b80355c845260209384019301818410611107575b5081810382f35b611134816001600160a01b0316612352565b1561114457611141612371565b50565b5f611157826001600160a01b0316612383565b9050611163828261240d565b5050565b606060405180602082528360208301526040820191508360051b8201855b8035548452602093840193018184101561111b57611185565b5f815c5f5260205ff35b5f546001600160a01b031633146111d15760405162461bcd60e51b81526004016108d89061491c565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f611224611509565b611238576112386354e3ca0d60e01b61151b565b611240611758565b83602001515f0361125b5761125b63be8b850760e01b61151b565b60a085205f6112698261179a565b9050611274816117aa565b60808701515f9081908190611295906001600160a01b03168b8b8b8b61243a565b80935081955082945050505061130484866040518060a001604052808681526020018e6060015160020b81526020018d5f0151151581526020018d604001516001600160a01b031681526020018562ffffff168152508c5f01516112fd578d6020015161257a565b8d5161257a565b60808b01519096505f925061132891506001600160a01b03168a8a888b8b88612658565b909550905080156113425761134289828b608001516118f4565b61134d8986336118f4565b50505050949350505050565b611361611509565b611375576113756354e3ca0d60e01b61151b565b816113898161138384611523565b33611543565b6107c98461139f836001600160a01b03166116d3565b8461278a565b5f336001600160a01b038616148015906113e257506001600160a01b0385165f90815260036020908152604080832033845290915290205460ff16155b15611452576001600160a01b0385165f90815260056020908152604080832033845282528083208684529091529020545f1981146114505761142483826148dd565b6001600160a01b0387165f90815260056020908152604080832033845282528083208884529091529020555b505b6001600160a01b0385165f908152600460209081526040808320868452909152812080548492906114849084906148dd565b90915550506001600160a01b0384165f908152600460209081526040808320868452909152812080548492906114bb9084906148f0565b9250508190555082846001600160a01b0316866001600160a01b03165f516020614db55f395f51905f5233866040516114f5929190614903565b60405180910390a45060015b949350505050565b5f516020614dd55f395f51905f525c90565b805f5260045ffd5b5f6001607f1b821061153f5761153f6393dafdf160e01b61151b565b5090565b81600f0b5f0361155257505050565b5f806115686001600160a01b0386168486612848565b91509150805f036115805761157b612877565b61158f565b815f0361158f5761158f61289f565b5050505050565b5f6115a9846001600160a01b0316612352565b156115d4575f5f5f5f85875af19050806115cf576115cf835f633d2cec6f60e21b6128c7565b6107c9565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f604082015250806107c9576107c98463a9059cbb60e01b633c9fd93960e21b6128c7565b5f5f61164861235f565b905061165c816001600160a01b0316612352565b15611669573491506116ba565b341561167f5761167f635876424f60e11b61151b565b5f516020614df55f395f51905f525c5f6116a16001600160a01b038416612383565b90506116ad82826148dd565b93506116b7612371565b50505b6116cd816116c784611523565b85611543565b50919050565b6001600160a01b031690565b6001600160a01b0383165f908152600460209081526040808320858452909152812080548392906117119084906148f0565b9250508190555081836001600160a01b03165f6001600160a01b03165f516020614db55f395f51905f52338560405161174b929190614903565b60405180910390a4505050565b306001600160a01b037f000000000000000000000000000000000004444c5dc75cb358380d2e3de08a901614611798576117986306c4a1c760e11b61151b565b565b5f90815260066020526040902090565b80546117b5906116d3565b6001600160a01b03165f036111415761114163486aa30760e01b61151b565b85336001600160a01b03821614611858576117f96001600160a01b038816602061293f565b156118585761185633878787878760405160240161181c96959493929190614a52565b60408051601f198184030181529190526020810180516001600160e01b0316635b54587d60e11b1790526001600160a01b0389169061294e565b505b50505050505050565b60038301545f906001600160801b03168082036118885761188863a74f97ab60e01b61151b565b6118a661189485611523565b5f0361189f85611523565b5f036129e8565b915083156118ca576001850180546001600160801b038316600160801b8702040190555b82156118ec576002850180546001600160801b038316600160801b8602040190555b509392505050565b825161190a906119048460801d90565b83611543565b610753836020015161190484600f0b90565b85336001600160a01b03821614611858576119416001600160a01b038816601061293f565b156118585761185633878787878760405160240161196496959493929190614a52565b60408051601f198184030181529190526020810180516001600160e01b031663e1b4af6960e01b1790526001600160a01b0389169061294e565b60015f516020614dd55f395f51905f525d565b5f5f516020614dd55f395f51905f525d565b62ffffff16628000001490565b620f424062ffffff8216111561114157611141631400211360e01b62ffffff831661217e565b6119ff826117aa565b8154611a0b90826129fb565b90915550565b84336001600160a01b03821614611b25575f8460400151138015611a455750611a456001600160a01b03871661080061293f565b15611aa657611aa03386868686604051602401611a66959493929190614ac8565b60408051601f198184030181529190526020810180516001600160e01b031663259982e560e01b1790526001600160a01b0388169061294e565b50611b25565b5f846040015113158015611aca5750611aca6001600160a01b03871661020061293f565b15611b25576118583386868686604051602401611aeb959493929190614ac8565b60408051601f198184030181529190526020810180516001600160e01b031663021d0ee760e41b1790526001600160a01b0388169061294e565b505050505050565b80600f81900b811461098d5761098d6393dafdf160e01b61151b565b6060810151602082015160408301515f9283929091611b688282612a16565b604080516080810182525f80825260208201819052918101829052606081019190915283600f0b5f14611cab57611ba18884865f612a76565b6001600160801b0316602083015215158152611bc08883866001612a76565b6001600160801b03166060830152151560408201525f600f85900b12611c705760808701515f9060020b620d89e71981810783139082900503620d89e891909105036001016001600160801b03049050806001600160801b031682602001516001600160801b03161115611c3f57611c3f63b8e3c38560e01b8561200e565b806001600160801b031682606001516001600160801b03161115611c6e57611c6e63b8e3c38560e01b8461200e565b505b805115611c8c576080870151611c8c9060058a01908590612b37565b806040015115611cab576080870151611cab9060058a01908490612b37565b5f5f611cb88a8686612b89565b8a5160a08c015160408051602681019290925260068083018a9052600383018b9052928252603a600c8301205f838301819052602080850182905293819052908152928f01909152812092945090925080611d15838a8787612c3d565b91509150611d33611d2583611523565b611d2e83611523565b6129e8565b995050505050505f84600f0b1215611d6a57805115611d5657611d568884612cf6565b806040015115611d6a57611d6a8883612cf6565b5082600f0b5f14611e765786545f80611d868360a01c60020b90565b611d8f846116d3565b915091508460020b8260020b1215611dd457611dcd611dc7611dc2611db388612d19565b611dbc88612d19565b8a612fd1565b611b2d565b5f6129e8565b9750611e72565b8360020b8260020b1215611e4d57611e0b611df5611dc283611dbc88612d19565b611d2e611dc2611e0489612d19565b858b613009565b60038b0154909850611e26906001600160801b031687613035565b60038b0180546001600160801b0319166001600160801b0392909216919091179055611e72565b611e6f5f611d2e611dc2611e6089612d19565b611e6989612d19565b8b613009565b97505b5050505b5050509250929050565b5f608082811d9084901d01600f83810b9085900b01611eaa611ea183611b2d565b611d2e83611b2d565b95945050505050565b5f806001600160a01b0389163303611ecf57508490505f612002565b8591505f87604001511315611f7b57611ef36001600160a01b038a1661040061293f565b15611f7657611f6733898989898989604051602401611f189796959493929190614b07565b60408051601f198184030181529190526020810180516001600160e01b03166327c18fbf60e21b179052611f566001600160a01b038c16600261293f565b6001600160a01b038c16919061305c565b9050611f73828261309d565b91505b612002565b611f906001600160a01b038a1661010061293f565b1561200257611ff333898989898989604051602401611fb59796959493929190614b07565b60408051601f198184030181529190526020810180516001600160e01b0316633615df3f60e11b179052611f566001600160a01b038c16600161293f565b9050611fff828261309d565b91505b97509795505050505050565b815f528060020b60045260245ffd5b6040518381526001600160a01b03831660048201526001600160a01b0382166024820152604481fd5b5f61205b6001600160a01b038416608061293f565b15801561207757506120776001600160a01b038416600861293f565b1561208357505f610659565b6120976001600160a01b038416604061293f565b1580156120b357506120b36001600160a01b038416600461293f565b156120bf57505f610659565b6120d46001600160a01b03841661040061293f565b1580156120f057506120f06001600160a01b038416600261293f565b156120fc57505f610659565b6121116001600160a01b03841661010061293f565b15801561212d575061212d6001600160a01b038416600161293f565b1561213957505f610659565b6001600160a01b0383161561216857613fff831615158061216357506121638262ffffff166119c3565b610707565b6121768262ffffff166119c3565b159392505050565b815f526001600160a01b03811660045260245ffd5b5f6121a28262ffffff166119c3565b156121ae57505f919050565b61153f8262ffffff166119d0565b82336001600160a01b038216146107c9576121e26001600160a01b03851661200061293f565b156107c95761158f3384846040516024016121ff93929190614b54565b60408051601f198184030181529190526020810180516001600160e01b0316636e4c1aa760e11b1790526001600160a01b0386169061294e565b5f612246845f01546116d3565b6001600160a01b03161561226457612264637983c05160e01b61151b565b61226d836130be565b905061228d82612287836122815f8861331b565b90613335565b906129fb565b9093555090919050565b83336001600160a01b0382161461158f576122bd6001600160a01b03861661100061293f565b1561158f57611b25338585856040516024016122dc9493929190614b8a565b60408051601f198184030181529190526020810180516001600160e01b0316636fe7e6eb60e01b1790526001600160a01b0387169061294e565b61231f826117aa565b815462ffffff60b81b191662ffffff60b81b60b883901b1617611a0b565b5f5f6123498385613350565b5c949350505050565b6001600160a01b03161590565b5f516020614d955f395f51905f525c90565b5f5f516020614d955f395f51905f525d565b5f612396826001600160a01b0316612352565b156123a2575047919050565b6040516370a0823160e01b81526001600160a01b038316906370a08231906123ce903090600401614739565b602060405180830381865afa1580156123e9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106599190614bcb565b6001600160a01b0382165f516020614d955f395f51905f525d805f516020614df55f395f51905f525d5050565b60208301515f806001600160a01b0388163303612459575f915061256f565b61246d6001600160a01b038916608061293f565b1561256f575f6124bf89338a8a8a8a604051602401612490959493929190614c06565b60408051601f198184030181529190526020810180516001600160e01b03166315d7892d60e21b17905261294e565b905080516060146124da576124da631e048e1d60e01b61151b565b6124ec886040015162ffffff166119c3565b156124f957606081015191505b61250d6001600160a01b038a16600861293f565b1561256d57604081015192505f6125248460801d90565b905080600f0b5f1461256b575f8512612541600f83900b87614c45565b955080612550575f8612612554565b5f86135b1561256957612569637d05b8eb60e11b61151b565b505b505b505b955095509592505050565b5f80808080612589898861336b565b93509350935093505f8311156125b7576001600160a01b0386165f9081526001602052604090208054840190555b33887f40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f6125e48760801d90565b6125ee88600f0b90565b85516040808801516020808a01518351600f97880b81529590960b908501526001600160a01b03909216908301526001600160801b0316606082015260029190910b608082015262ffffff861660a082015260c00160405180910390a35091979650505050505050565b5f806001600160a01b038916330361267457508490505f612002565b5f61267f8460801d90565b90505f61268c85600f0b90565b90506126a26001600160a01b038c16604061293f565b1561272457612717611dc2338c8c8c8c8c6040516024016126c896959493929190614c64565b60408051601f198184030181529190526020810180516001600160e01b031663b47b2fb160e01b1790526127066001600160a01b038f16600461293f565b6001600160a01b038f16919061305c565b6127219082614caa565b90505b5f81600f0b5f14158061273a575082600f0b5f14155b1561277857895160208b01515f139015151461275f5761275a82846129e8565b612769565b61276983836129e8565b9050612775898261309d565b98505b979b979a509698505050505050505050565b336001600160a01b03841681148015906127c957506001600160a01b038085165f9081526003602090815260408083209385168352929052205460ff16155b1561283d576001600160a01b038085165f9081526005602090815260408083209385168352928152828220868352905220545f19811461283b5761280d83826148dd565b6001600160a01b038087165f9081526005602090815260408083209387168352928152828220888352905220555b505b6107c98484846139d0565b5f5f5f6128558587613350565b805c93509050612869600f85900b84614c45565b915081815d50935093915050565b5f516020614e155f395f51905f525c600181039050805f516020614e155f395f51905f525d50565b5f516020614e155f395f51905f525c600181019050805f516020614e155f395f51905f525d50565b6040516390bfb86560e01b8082526001600160a01b03851660048301526001600160e01b031984166024830152608060448301526020601f3d018190040260a0810160648401523d608484015290913d5f60a483013e60048260a4018201526001600160e01b031984168260c4018201528160e40181fd5b166001600160a01b0316151590565b60605f5f5f8451602086015f885af190508061297e5761297e8461297185614cd7565b63a9e35b2f60e01b6128c7565b6040519150601f19603f3d011682016040523d82523d5f602084013e6020825110806129cc575060208301516001600160e01b0319166129bf836020015190565b6001600160e01b03191614155b156129e1576129e1631e048e1d60e01b61151b565b5092915050565b6001600160801b031660809190911b1790565b60d01b62ffffff60d01b1662ffffff60d01b19919091161790565b8060020b8260020b12612a3557612a3563c4433ed560e01b8383613a3c565b620d89e719600283900b1215612a5657612a5663d5e2f7ab60e01b8361200e565b620d89e8600282900b13156111635761116363035aeeff60e31b8261200e565b600283900b5f908152600485016020526040812080548291906001600160801b03811690600160801b9004600f0b612aae8288613035565b6001600160801b03808216159084168015919091141596509094505f03612af857885460a01c60020b60020b8860020b13612af8576001808a0154908401556002808a0154908401555b5f86612b0d57612b088883614caa565b612b17565b612b178883614d15565b90508060801b6001600160801b0386161784555050505094509492505050565b600291820b910b80820715612b645760405163d4d8f3e681528260208201528160408201526044601c8201fd5b80820591508160081d5f528260205260405f20600160ff84161b815418815550505050565b600282810b5f81815260048601602052604080822085850b83529082208754929485949293919260a09290921c900b90811215612bdf578160010154836001015403945081600201548360020154039350612c32565b8560020b8160020b12612c0b578260010154826001015403945082600201548260020154039350612c32565b81600101548360010154896001015403039450816002015483600201548960020154030393505b505050935093915050565b83545f9081906001600160801b0316600f86900b8203612c7c57806001600160801b03165f03612c7757612c77632bbfae4960e21b61151b565b612ca2565b612c868187613035565b87546001600160801b0319166001600160801b03919091161787555b612cc087600101548603826001600160801b0316600160801b613a59565b9250612ce087600201548503826001600160801b0316600160801b613a59565b6001880195909555505060029094015591929050565b600290810b5f908152600490920160205260408220828155600181018390550155565b60020b5f60ff82901d80830118620d89e8811115612d4257612d426345c3193d60e11b8461200e565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b186002821615612d7e576ffff97272373d413259a46990580e213a0260801c5b6004821615612d9d576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612dbc576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612ddb576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612dfa576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612e19576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612e38576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612e58576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612e78576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612e98576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612eb8576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612ed8576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612ef8576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612f18576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612f38576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612f59576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612f79576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612f98576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612fb5576b048a170391f7dc42444e8fa20260801c5b5f841315612fc1575f19045b63ffffffff0160201c9392505050565b5f5f82600f0b12612ff857612ff1612fec8585856001613af5565b613bb8565b5f03611501565b611501612fec8585855f035f613af5565b5f5f82600f0b1261302457612ff1612fec8585856001613bd1565b611501612fec8585855f035f613bd1565b6001600160801b038216600f82900b01608081901c15610659576393dafdf15f526004601cfd5b5f5f613068858561294e565b905082613078575f915050610707565b805160401461309157613091631e048e1d60e01b61151b565b60400151949350505050565b5f608082811d9084901d03600f83810b9085900b03611eaa611ea183611b2d565b5f73fffd8963efd1fc6a506488495d951d51639616826401000276a21983016001600160a01b031611156130fd576130fd6318521d4960e21b8361217e565b600160201b600160c01b03602083901b16805f61311982613c1d565b60ff1690506080811061313457607f810383901c915061313e565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c6001603f1b161760c19b909b1c6001603e1b169a909a1760c29990991c6001603d1b169890981760c39790971c6001603c1b169690961760c49590951c6001603b1b169490941760c59390931c6001603a1b169290921760c69190911c600160391b161760c79190911c600160381b161760c89190911c600160371b161760c99190911c600160361b161760ca9190911c600160351b161760cb9190911c600160341b161760cc9190911c600160331b161760cd9190911c600160321b1617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461330c57886001600160a01b03166132f182612d19565b6001600160a01b03161115613306578161330e565b8061330e565b815b9998505050505050505050565b6001600160a01b03166001600160a01b0319919091161790565b60a01b62ffffff60a01b1662ffffff60a01b19919091161790565b6001600160a01b039182165f90815291166020526040902090565b604080516060810182525f8082526020820181905291810182905281908190855460408601515f816133a557610fff60c484901c166133af565b610fff60b884901c165b885161ffff9190911691505f6133c4856116d3565b6001600160a01b031686526133dc8560a01c60020b90565b60020b602087015260038b01546001600160801b0316604087015260808a01515f9062400000166134165760d086901c62ffffff16613428565b6134288b6080015162ffffff16613ca6565b9050831561344e57620f4240610fff851662ffffff831681810292909204910103613450565b805b975050620f42408762ffffff161061347b5789515f121561347b5761347b634b10312360e11b61151b565b89515f03613493575f5f9850985050505050506139c7565b831561351c576134a2856116d3565b6001600160a01b03168a606001516001600160a01b0316106134de576134de6134ca866116d3565b60608c0151637c9c6e8f60e01b919061201d565b6401000276a36001600160a01b03168a606001516001600160a01b0316116135175760608a015161351790639e4d7cc760e01b9061217e565b613595565b613525856116d3565b6001600160a01b03168a606001516001600160a01b03161161354d5761354d6134ca866116d3565b73fffd8963efd1fc6a506488495d951d5263988d266001600160a01b03168a606001516001600160a01b0316106135955760608a015161359590639e4d7cc760e01b9061217e565b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152846135e4578b600201546135ea565b8b600101545b60e08201525b82158061361557508a606001516001600160a01b0316875f01516001600160a01b0316145b6138f55786516001600160a01b03168152602080880151908c015161363f9160058f019188613cb5565b1515604083015260020b60208201819052620d89e7191261366557620d89e71960208201525b620d89e860020b816020015160020b1261368357620d89e860208201525b6136908160200151612d19565b6001600160a01b0390811660608381018290528951908e01516136cd939192911680821891811160018a161891909102188960400151868c613da2565b60c085015260a084015260808301526001600160a01b031687528a515f1215613729576136fd8160a00151613bb8565b830392506137188160c001518260800151612fec91906148f0565b6137229083614d42565b915061375a565b61373c8160c00151826080015101613bb8565b8301925061374d8160a00151613bb8565b6137579083614c45565b91505b83156137a9575f848962ffffff161461379157620f4240858360c00151846080015101028161378b5761378b614d61565b04613797565b8160c001515b60c08301805182900390529990990198505b60408701516001600160801b0316156137e9576137dd8160c00151600160801b89604001516001600160801b031691020490565b60e08201805190910190525b80606001516001600160a01b0316875f01516001600160a01b0316036138cf578060400151156138aa575f5f86613829578d600101548360e00151613834565b8260e001518e600201545b915091505f61387f8f85602001518585600292830b5f90815260049094016020526040909320600181018054909203909155908101805490920390915554600160801b9004600f0b90565b9050871561388a575f035b6138988a6040015182613035565b6001600160801b031660408b01525050505b846138b95780602001516138c2565b60018160200151035b60020b60208801526135f0565b805187516001600160a01b039081169116146138f05786516138c2906130be565b6135f0565b86516020880151613912919061390c908990613335565b9061331b565b8c55604087015160038d01546001600160801b0390811691161461395757604087015160038d0180546001600160801b0319166001600160801b039092169190911790555b8461396b5760e081015160028d0155613976565b60e081015160018d01555b8a515f13851515146139a35761399c61398e83611b2d565b611d2e858e5f015103611b2d565b99506139c0565b6139bd6139b4848d5f015103611b2d565b611d2e84611b2d565b99505b5050505050505b92959194509250565b6001600160a01b0383165f90815260046020908152604080832085845290915281208054839290613a029084906148dd565b92505081905550815f6001600160a01b0316846001600160a01b03165f516020614db55f395f51905f52338560405161174b929190614903565b6040518381528260020b60048201528160020b6024820152604481fd5b5f838302815f1985870982811083820303915050808411613a78575f5ffd5b805f03613a8a57508290049050610707565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f836001600160a01b0316856001600160a01b03161115613b14579293925b6001600160a01b038516613b2e5762bfc9215f526004601cfd5b600160601b600160e01b03606084901b166001600160a01b038686031683613b8157866001600160a01b0316613b6e8383896001600160a01b0316613a59565b81613b7b57613b7b614d61565b04613bad565b613bad613b988383896001600160a01b0316613f05565b886001600160a01b0316808204910615150190565b979650505050505050565b805f81121561098d5761098d6393dafdf160e01b61151b565b5f6001600160a01b038481169086160360ff81901d90810118600160601b6001600160801b038516613c04818484613a59565b9350845f83858409111684019350505050949350505050565b5f5f8211613c29575f5ffd5b507b01c1818141808140018080c0814100004181408140c0c100414140c160221b601f6f8421084210842108cc6318c6db6d54be6001600160801b03841160071b84811c6001600160401b031060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b62bfffff811661098d816119d0565b5f80600284810b9086900b8181078313919005038315613d3457600281900b60081d600181900b5f908152602089905260409020545f1960ff808516908190039190911c918216801515955090919085613d1657888360ff16860302613d29565b88613d2082613c1d565b840360ff168603025b965050505050613d98565b6001908101600281900b60081d80830b5f90815260208a905260409020545f1960ff841694851b011990811680151595509293919285613d7e57888360ff0360ff16860102613d91565b8883613d8983613f35565b0360ff168601025b9650505050505b5094509492505050565b5f80808062ffffff85166001600160a01b03808a16908b1610158288128015613e78575f613ddb8a5f0385620f424003620f4240613a59565b905082613df457613def8d8d8d6001613bd1565b613e01565b613e018c8e8d6001613af5565b9650868110613e35578b9750620f42408414613e2c57613e27878586620f424003613f05565b613e2e565b865b9450613e4e565b809650613e448d8c8386613fcf565b9750868a5f030394505b82613e6457613e5f8d898d5f613af5565b613e70565b613e70888e8d5f613bd1565b955050613ef6565b81613e8e57613e898c8c8c5f613af5565b613e9a565b613e9a8b8d8c5f613bd1565b9450848910613eab578a9650613ebd565b889450613eba8c8b878561401d565b96505b81613ed457613ecf8c888c6001613bd1565b613ee1565b613ee1878d8c6001613af5565b9550613ef3868485620f424003613f05565b93505b50505095509550955095915050565b5f613f11848484613a59565b90508180613f2157613f21614d61565b838509156107075760010180610707575f5ffd5b5f5f8211613f41575f5ffd5b507e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b15031604055f8290039091166101e07f804040554300526644320000502061067405302602000010750620017611707760fc7fb6db6db6ddddddddd34d34d349249249210842108c6318c639ce739cffffffff840260f81c161b60f71c1690811c63d76453e004601f169190911a1790565b5f6001600160801b038416156001600160a01b038616151715613ff957634f2461b85f526004601cfd5b816140105761400b8585856001614060565b611eaa565b611eaa858585600161414b565b5f6001600160801b038416156001600160a01b03861615171561404757634f2461b85f526004601cfd5b816140585761400b8585855f61414b565b611eaa8585855f5b5f81156140d0575f6001600160a01b038411156140945761408f84600160601b876001600160801b0316613a59565b6140ab565b6140ab6001600160801b038616606086901b614d75565b90506140c86140c3826001600160a01b0389166148f0565b61422d565b915050611501565b5f6001600160a01b038411156140fd576140f884600160601b876001600160801b0316613f05565b61411a565b61411a606085901b6001600160801b038716808204910615150190565b9050806001600160a01b0387161161413957634323a5555f526004601cfd5b6001600160a01b038616039050611501565b5f825f0361415a575083611501565b600160601b600160e01b03606085901b1682156141ec576001600160a01b0386168481029085828161418e5761418e614d61565b04036141be578181018281106141bc576141b283896001600160a01b031683613f05565b9350505050611501565b505b506140c881856141d76001600160a01b038a1683614d75565b6141e191906148f0565b808204910615150190565b6001600160a01b0386168481029085820414818311166142135763f5c787f15f526004601cfd5b8082036141b26140c3846001600160a01b038b1684613f05565b806001600160a01b038116811461098d5761098d6393dafdf160e01b61151b565b6001600160a01b0381168114611141575f5ffd5b5f5f60408385031215614273575f5ffd5b823561427e8161424e565b946020939093013593505050565b5f6020828403121561429c575f5ffd5b81356001600160e01b031981168114610707575f5ffd5b5f5f5f606084860312156142c5575f5ffd5b83356142d08161424e565b95602085013595506040909401359392505050565b5f5f5f606084860312156142f7575f5ffd5b83356143028161424e565b925060208401356143128161424e565b929592945050506040919091013590565b5f60208284031215614333575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156143705761437061433a565b60405290565b604051601f8201601f191681016001600160401b038111828210171561439e5761439e61433a565b604052919050565b803562ffffff8116811461098d575f5ffd5b8035600281900b811461098d575f5ffd5b5f60a082840312156143d9575f5ffd5b60405160a081016001600160401b03811182821017156143fb576143fb61433a565b604052905080823561440c8161424e565b8152602083013561441c8161424e565b602082015261442d604084016143a6565b604082015261443e606084016143b8565b606082015260808301356144518161424e565b6080919091015292915050565b5f5f83601f84011261446e575f5ffd5b5081356001600160401b03811115614484575f5ffd5b60208301915083602082850101111561449b575f5ffd5b9250929050565b5f5f5f5f5f61010086880312156144b7575f5ffd5b6144c187876143c9565b945060a0860135935060c0860135925060e08601356001600160401b038111156144e9575f5ffd5b6144f58882890161445e565b969995985093965092949392505050565b5f60208284031215614516575f5ffd5b81356107078161424e565b5f5f60408385031215614532575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561457857835183526020938401939092019160010161455a565b509095945050505050565b5f5f60208385031215614594575f5ffd5b82356001600160401b038111156145a9575f5ffd5b6145b58582860161445e565b90969095509350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60c08385031215614607575f5ffd5b61461184846143c9565b915061461f60a084016143a6565b90509250929050565b8035801515811461098d575f5ffd5b5f5f60408385031215614648575f5ffd5b82356146538161424e565b915061461f60208401614628565b5f5f5f5f848603610140811215614676575f5ffd5b61468087876143c9565b94506080609f1982011215614693575f5ffd5b5061469c61434e565b6146a860a087016143b8565b81526146b660c087016143b8565b602082015260e08601356040820152610100860135606082015292506101208501356001600160401b038111156146eb575f5ffd5b6146f78782880161445e565b95989497509550505050565b5f5f60c08385031215614714575f5ffd5b61471e84846143c9565b915060a083013561472e8161424e565b809150509250929050565b6001600160a01b0391909116815260200190565b5f5f6020838503121561475e575f5ffd5b82356001600160401b03811115614773575f5ffd5b8301601f81018513614783575f5ffd5b80356001600160401b03811115614798575f5ffd5b8560208260051b84010111156147ac575f5ffd5b6020919091019590945092505050565b5f5f604083850312156147cd575f5ffd5b82356147d88161424e565b9150602083013561472e8161424e565b5f5f5f5f8486036101208112156147fd575f5ffd5b61480787876143c9565b94506060609f198201121561481a575f5ffd5b50604051606081016001600160401b038111828210171561483d5761483d61433a565b60405261484c60a08701614628565b815260c0860135602082015260e08601356148668161424e565b604082015292506101008501356001600160401b038111156146eb575f5ffd5b5f5f5f5f60808587031215614899575f5ffd5b84356148a48161424e565b935060208501356148b48161424e565b93969395505050506040820135916060013590565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610659576106596148c9565b80820180821115610659576106596148c9565b6001600160a01b03929092168252602082015260400190565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f611501602083018486614942565b5f6020828403121561498d575f5ffd5b81516001600160401b038111156149a2575f5ffd5b8201601f810184136149b2575f5ffd5b80516001600160401b038111156149cb576149cb61433a565b6149de601f8201601f1916602001614376565b8181528560208385010111156149f2575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b6001600160a01b0387168152614a6b6020820187614a0f565b8460c08201528360e08201526101206101008201525f614a9061012083018486614942565b98975050505050505050565b805160020b8252602081015160020b602083015260408101516040830152606081015160608301525050565b6001600160a01b0386168152614ae16020820186614a0f565b614aee60c0820185614a9c565b6101606101408201525f613bad61016083018486614942565b6001600160a01b0388168152614b206020820188614a0f565b614b2d60c0820187614a9c565b84610140820152836101608201526101a06101808201525f61330e6101a083018486614942565b6001600160a01b038416815260e08101614b716020830185614a0f565b6001600160a01b039290921660c0919091015292915050565b6001600160a01b03851681526101008101614ba86020830186614a0f565b6001600160a01b039390931660c082015260029190910b60e09091015292915050565b5f60208284031215614bdb575f5ffd5b5051919050565b805115158252602080820151908301526040908101516001600160a01b0316910152565b6001600160a01b0386168152614c1f6020820186614a0f565b614c2c60c0820185614be2565b6101406101208201525f613bad61014083018486614942565b8082018281125f831280158216821582161715610efa57610efa6148c9565b6001600160a01b0387168152614c7d6020820187614a0f565b614c8a60c0820186614be2565b836101208201526101606101408201525f614a9061016083018486614942565b600f81810b9083900b0160016001607f1b03811360016001607f1b031982121715610659576106596148c9565b805160208201516001600160e01b0319811691906004821015614d0e576001600160e01b0319600483900360031b81901b82161692505b5050919050565b600f82810b9082900b0360016001607f1b0319811260016001607f1b0382131715610659576106596148c9565b8181035f8312801583831316838312821617156129e1576129e16148c9565b634e487b7160e01b5f52601260045260245ffd5b5f82614d8f57634e487b7160e01b5f52601260045260245ffd5b50049056fe27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b91b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859c090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab231e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd957d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b