60a06040523480156200001157600080fd5b5060405162002c2738038062002c27833981016040819052620000349162000191565b60405180604001604052806011815260200170454250544f3a20495020446f6d61696e7360781b81525060405180604001604052806002815260200161049560f41b81525081600090816200008a9190620002e7565b506001620000998282620002e7565b505050620000b6620000b0620000e060201b60201c565b620000e4565b600780546001600160a01b0319166001600160a01b039390931692909217909155608052620003b7565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b6000620001438262000136565b620001618162000149565b81146200016d57600080fd5b50565b8051620001438162000156565b8062000161565b805162000143816200017d565b60008060408385031215620001a957620001a9600080fd5b6000620001b7858562000170565b9250506020620001ca8582860162000184565b9150509250929050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806200021557607f821691505b6020821081036200022a576200022a620001ea565b50919050565b6000620001436200023e8381565b90565b6200024c8362000230565b81546008840282811b60001990911b908116901990911617825550505050565b60006200027b81848462000241565b505050565b818110156200029f57620002966000826200026c565b60010162000280565b5050565b601f8211156200027b576000818152602090206020601f85010481016020851015620002cc5750805b620002e06020601f86010483018262000280565b5050505050565b81516001600160401b03811115620003035762000303620001d4565b6200030f825462000200565b6200031c828285620002a3565b6020601f8311600181146200035357600084156200033a5750858201515b600019600886021c1981166002860217865550620003af565b600085815260208120601f198616915b8281101562000385578885015182556020948501946001909201910162000363565b86831015620003a25784890151600019601f89166008021c191682555b6001600288020188555050505b505050505050565b60805161282a620003fd60003960008181610582015281816108700152818161092701528181610a4501528181610ce40152818161104b015261116a015261282a6000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c8063715018a611610146578063c475abff116100c3578063e985e9c511610087578063e985e9c5146105a4578063f2fde38b146105e0578063f6a74ed7146105f3578063f80628b314610606578063f9cd32c51461063f578063fca247ac1461065257600080fd5b8063c475abff14610521578063c87b56dd14610534578063d6e4fa8614610547578063da8c229e1461055a578063ddf7fcb01461057d57600080fd5b806396e494e81161010a57806396e494e8146104cb578063a22cb465146104de578063a7fc7a07146104f1578063b88d4fde14610504578063c1a287e21461051757600080fd5b8063715018a61461045e57806371bf5a95146104665780638a59a7fd146104795780638da5cb5b146104b257806395d89b41146104c357600080fd5b80633f15457f116101d45780634f558e79116101985780634f558e7914610412578063558a72971461042557806356d3163d146103ec5780636352211e1461043857806370a082311461044b57600080fd5b80633f15457f1461038057806340d51c491461039357806342842e0e146103d9578063468daa83146103ec5780634e543b26146103ff57600080fd5b80630e297b451161021b5780630e297b45146102eb57806322d7af531461030b57806323b872dd1461034757806328ed4f6c1461035a57806329448e1d1461036d57600080fd5b806301ffc9a71461025857806306d5c33d1461028157806306fdde03146102a1578063081812fc146102b6578063095ea7b3146102d6575b600080fd5b61026b610266366004611b78565b610665565b6040516102789190611ba3565b60405180910390f35b600954610294906001600160a01b031681565b6040516102789190611bf3565b6102a96106b7565b6040516102789190611c57565b6102c96102c4366004611c79565b610749565b6040516102789190611cb4565b6102e96102e4366004611cd6565b610770565b005b6102fe6102f9366004611d13565b6107fe565b6040516102789190611d69565b61033a610319366004611c79565b600090815260026020526040902054600160d01b900465ffffffffffff1690565b6040516102789190611d85565b6102e9610355366004611d93565b610817565b6102e9610368366004611db7565b610848565b6102e961037b366004611e09565b610996565b600754610294906001600160a01b031681565b6103cc6103a1366004611e2a565b6001600160a01b0316600090815260036020526040902054600160c01b90046001600160401b031690565b6040516102789190611e5a565b6102e96103e7366004611d93565b6109d0565b6102e96103fa366004611e09565b6109eb565b6102e961040d366004611e2a565b610a15565b61026b610420366004611c79565b610aa4565b6102e9610433366004611e7b565b610aaf565b6102c9610446366004611c79565b610b1f565b6102fe610459366004611e2a565b610b59565b6102e9610ba6565b6102e9610474366004611e09565b610bba565b6102fe610487366004611e2a565b6001600160a01b0316600090815260036020526040902054600160401b90046001600160401b031690565b6006546001600160a01b03166102c9565b6102a9610be4565b61026b6104d9366004611c79565b610bf3565b6102e96104ec366004611e7b565b610c1c565b6102e96104ff366004611e2a565b610c2b565b6102e9610512366004611fa7565b610c7f565b6102fe6276a70081565b6102fe61052f366004612025565b610cb7565b6102a9610542366004611c79565b610e0a565b6102fe610555366004611c79565b610ea6565b61026b610568366004611e2a565b60086020526000908152604090205460ff1681565b6102fe7f000000000000000000000000000000000000000000000000000000000000000081565b61026b6105b2366004612047565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102e96105ee366004611e2a565b610ebf565b6102e9610601366004611e2a565b610ef6565b6103cc610614366004611e2a565b6001600160a01b0316600090815260036020526040902054600160801b90046001600160401b031690565b600a54610294906001600160a01b031681565b6102fe610660366004611d13565b610f47565b60006001600160e01b031982166301ffc9a760e01b148061069657506001600160e01b031982166380ac58cd60e01b145b806106b157506001600160e01b03198216630a3b53db60e21b145b92915050565b6060600080546106c69061207f565b80601f01602080910402602001604051908101604052809291908181526020018280546106f29061207f565b801561073f5780601f106107145761010080835404028352916020019161073f565b820191906000526020600020905b81548152906001019060200180831161072257829003601f168201915b5050505050905090565b600061075482610f56565b506000908152600460205260409020546001600160a01b031690565b600061077b82610f7b565b9050806001600160a01b0316836001600160a01b0316036107b75760405162461bcd60e51b81526004016107ae906120ec565b60405180910390fd5b336001600160a01b03821614806107d357506107d381336105b2565b6107ef5760405162461bcd60e51b81526004016107ae90612156565b6107f98383610fb0565b505050565b600061080d848484600061101e565b90505b9392505050565b610821338261123b565b61083d5760405162461bcd60e51b81526004016107ae906121b0565b6107f98383836112b6565b6007546040516302571be360e01b815230916001600160a01b0316906302571be390610898907f000000000000000000000000000000000000000000000000000000000000000090600401611d69565b602060405180830381865afa1580156108b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d991906121cb565b6001600160a01b0316146108ec57600080fd5b6108f6338361123b565b6108ff57600080fd5b6007546040516306ab592360e01b81526001600160a01b03909116906306ab592390610953907f000000000000000000000000000000000000000000000000000000000000000090869086906004016121ec565b6020604051808303816000875af1158015610972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f9919061221f565b61099e611432565b600a80546001600160a01b0319166001600160a01b0383161790556109c4816001610aaf565b6109cd81610c2b565b50565b6107f983838360405180602001604052806000815250610c7f565b6109f3611432565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b610a1d611432565b600754604051630c4b7b8560e11b81526001600160a01b0390911690631896f70a90610a6f907f0000000000000000000000000000000000000000000000000000000000000000908590600401612240565b600060405180830381600087803b158015610a8957600080fd5b505af1158015610a9d573d6000803e3d6000fd5b5050505050565b60006106b18261145c565b610ab7611432565b60075460405163a22cb46560e01b81526001600160a01b039091169063a22cb46590610ae9908590859060040161225b565b600060405180830381600087803b158015610b0357600080fd5b505af1158015610b17573d6000803e3d6000fd5b505050505050565b600042610b2b83611479565b65ffffffffffff1611610b505760405162461bcd60e51b81526004016107ae906122a2565b6106b182610f7b565b60006001600160a01b038216610b815760405162461bcd60e51b81526004016107ae906122f8565b506001600160a01b03166000908152600360205260409020546001600160401b031690565b610bae611432565b610bb8600061149a565b565b610bc2611432565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6060600180546106c69061207f565b6000426276a700610c0384611479565b65ffffffffffff16610c15919061231e565b1092915050565b610c273383836114ec565b5050565b610c33611432565b6001600160a01b038116600081815260086020526040808220805460ff19166001179055517f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d74749190a250565b610c89338361123b565b610ca55760405162461bcd60e51b81526004016107ae906121b0565b610cb18484848461158e565b50505050565b6007546040516302571be360e01b815260009130916001600160a01b03909116906302571be390610d0c907f000000000000000000000000000000000000000000000000000000000000000090600401611d69565b602060405180830381865afa158015610d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4d91906121cb565b6001600160a01b031614610d6057600080fd5b3360009081526008602052604090205460ff16610d7c57600080fd5b6000610d8784611479565b65ffffffffffff1690506000610d9d848361231e565b905042610dad6276a7008461231e565b1015610db857600080fd5b610dc285826115c1565b847f9b87a00e30f1ac65d898f070f8a3488fe60517182d0a2098e1b4b93a54aa9bd682604051610df2919061234e565b60405180910390a265ffffffffffff16949350505050565b6060610e158261145c565b610e315760405162461bcd60e51b81526004016107ae90612380565b6009546040516344a5a61760e11b81526001600160a01b039091169063894b4c2e90610e61908590600401611d69565b600060405180830381865afa158015610e7e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106b191908101906123e8565b6000610eb182611479565b65ffffffffffff1692915050565b610ec7611432565b6001600160a01b038116610eed5760405162461bcd60e51b81526004016107ae90612465565b6109cd8161149a565b610efe611432565b6001600160a01b038116600081815260086020526040808220805460ff19169055517f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e811139190a250565b600061080d848484600161101e565b610f5f8161145c565b6109cd5760405162461bcd60e51b81526004016107ae906124a9565b6000818152600260205260408120546001600160a01b0316806106b15760405162461bcd60e51b81526004016107ae906124a9565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610fe582610f7b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6007546040516302571be360e01b815260009130916001600160a01b03909116906302571be390611073907f000000000000000000000000000000000000000000000000000000000000000090600401611d69565b602060405180830381865afa158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b491906121cb565b6001600160a01b0316146110c757600080fd5b3360009081526008602052604090205460ff166110e357600080fd5b6110ec85610bf3565b6111085760405162461bcd60e51b81526004016107ae906124e2565b6111118561145c565b1561111f5761111f85611649565b611129848661170f565b61113c85611137854261231e565b6115c1565b81156111db576007546040516306ab592360e01b81526001600160a01b03909116906306ab592390611196907f000000000000000000000000000000000000000000000000000000000000000090899089906004016121ec565b6020604051808303816000875af11580156111b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d9919061221f565b505b6001600160a01b038416857fb3d987963d01b2f68493b4bdb130988f157ea43070d4ad840fee0466ed9370d9611211864261231e565b60405161121e9190611d69565b60405180910390a3611230834261231e565b90505b949350505050565b60008061124783610b1f565b9050806001600160a01b0316846001600160a01b031614806112825750836001600160a01b031661127784610749565b6001600160a01b0316145b8061123357506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16611233565b826001600160a01b03166112c982610f7b565b6001600160a01b0316146112ef5760405162461bcd60e51b81526004016107ae90612534565b6001600160a01b0382166113155760405162461bcd60e51b81526004016107ae90612585565b61132283838360016118a4565b826001600160a01b031661133582610f7b565b6001600160a01b03161461135b5760405162461bcd60e51b81526004016107ae90612534565b600081815260046020908152604080832080546001600160a01b03191690556001600160a01b03868116808552600384528285209187168086528386208787526002909552838620835467ffffffffffffffff198082166001600160401b039283166000190183161786558754908116908216600101909116178655805465ffffffffffff60a01b168217600160d01b4265ffffffffffff16021781559351929587939192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4610b178686866001611918565b6006546001600160a01b03163314610bb85760405162461bcd60e51b81526004016107ae906125c7565b6000908152600260205260409020546001600160a01b0316151590565b600090815260026020526040902054600160a01b900465ffffffffffff1690565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03160361151d5760405162461bcd60e51b81526004016107ae9061260b565b6001600160a01b0383811660008181526005602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190611581908590611ba3565b60405180910390a3505050565b6115998484846112b6565b6115a584848484611985565b610cb15760405162461bcd60e51b81526004016107ae9061266a565b600082815260026020908152604080832080546001600160a01b03811685526003909352922065ffffffffffff60a01b19909116600160a01b65ffffffffffff85169081029190911783558154600160c01b90046001600160401b03161015610cb1578054600160c01b65ffffffffffff8516026001600160c01b0390911617815550505050565b600061165482610f7b565b90506116648160008460016118a4565b61166d82610f7b565b600083815260046020908152604080832080546001600160a01b03191690556001600160a01b03841680845260038352818420805467ffffffffffffffff1981166001600160401b0391821660001901909116178155878552600290935281842084905590519394509092859291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a46107f9826000856001611918565b6001600160a01b0382166117355760405162461bcd60e51b81526004016107ae906126ac565b61173e8161145c565b1561175b5760405162461bcd60e51b81526004016107ae906126f0565b6117696000838360016118a4565b6117728161145c565b1561178f5760405162461bcd60e51b81526004016107ae906126f0565b6001600160a01b03821660008181526003602090815260408083208584526002909252822081546fffffffffffffffffffffffffffffffff19811660016001600160401b0380841682018116928317600160401b67ffffffffffffffff1990951690931784900481169091018116909202178355815465ffffffffffff60a01b16909417600160d01b4265ffffffffffff1602178155815491939092600160801b90920416900361185e57815467ffffffffffffffff60801b1916600160801b426001600160401b0316021782555b60405183906001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4610cb1600085856001611918565b600a5460405163b676687560e01b81526001600160a01b039091169063b6766875906118da908790879087908790600401612700565b600060405180830381600087803b1580156118f457600080fd5b505af1158015611908573d6000803e3d6000fd5b50505050610cb184848484611a83565b600a5460405163b077a31160e01b81526001600160a01b039091169063b077a3119061194e908790879087908790600401612700565b600060405180830381600087803b15801561196857600080fd5b505af115801561197c573d6000803e3d6000fd5b50505050610cb1565b60006001600160a01b0384163b15611a7b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906119c990339089908890889060040161273e565b6020604051808303816000875af1925050508015611a04575060408051601f3d908101601f19168201909252611a019181019061278d565b60015b611a61573d808015611a32576040519150601f19603f3d011682016040523d82523d6000602084013e611a37565b606091505b508051600003611a595760405162461bcd60e51b81526004016107ae9061266a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611233565b506001611233565b6001600160a01b03808516600090815260036020526040808220928616825290206001831115610b17576001600160a01b03861615611afe57815483908390600090611ad99084906001600160401b03166127ae565b92506101000a8154816001600160401b0302191690836001600160401b031602179055505b6001600160a01b03851615610b1757805483908290600090611b2a9084906001600160401b03166127d1565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550505050505050565b6001600160e01b031981165b81146109cd57600080fd5b80356106b181611b56565b600060208284031215611b8d57611b8d600080fd5b60006112338484611b6d565b8015155b82525050565b602081016106b18284611b99565b60006106b16001600160a01b038316611bc8565b90565b6001600160a01b031690565b60006106b182611bb1565b60006106b182611bd4565b611b9d81611bdf565b602081016106b18284611bea565b60005b83811015611c1c578181015183820152602001611c04565b50506000910152565b6000611c2f825190565b808452602084019350611c46818560208601611c01565b601f01601f19169290920192915050565b602080825281016108108184611c25565b80611b62565b80356106b181611c68565b600060208284031215611c8e57611c8e600080fd5b60006112338484611c6e565b60006001600160a01b0382166106b1565b611b9d81611c9a565b602081016106b18284611cab565b611b6281611c9a565b80356106b181611cc2565b60008060408385031215611cec57611cec600080fd5b6000611cf88585611ccb565b9250506020611d0985828601611c6e565b9150509250929050565b600080600060608486031215611d2b57611d2b600080fd5b6000611d378686611c6e565b9350506020611d4886828701611ccb565b9250506040611d5986828701611c6e565b9150509250925092565b80611b9d565b602081016106b18284611d63565b65ffffffffffff8116611b9d565b602081016106b18284611d77565b600080600060608486031215611dab57611dab600080fd5b6000611d378686611ccb565b60008060408385031215611dcd57611dcd600080fd5b6000611dd98585611c6e565b9250506020611d0985828601611ccb565b60006106b182611c9a565b611b6281611dea565b80356106b181611df5565b600060208284031215611e1e57611e1e600080fd5b60006112338484611dfe565b600060208284031215611e3f57611e3f600080fd5b60006112338484611ccb565b6001600160401b038116611b9d565b602081016106b18284611e4b565b801515611b62565b80356106b181611e68565b60008060408385031215611e9157611e91600080fd5b6000611e9d8585611ccb565b9250506020611d0985828601611e70565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b0382111715611ee957611ee9611eae565b6040525050565b6000611efb60405190565b9050611f078282611ec4565b919050565b60006001600160401b03821115611f2557611f25611eae565b601f19601f83011660200192915050565b82818337506000910152565b6000611f55611f5084611f0c565b611ef0565b905082815260208101848484011115611f7057611f70600080fd5b611f7b848285611f36565b509392505050565b600082601f830112611f9757611f97600080fd5b8135611233848260208601611f42565b60008060008060808587031215611fc057611fc0600080fd5b6000611fcc8787611ccb565b9450506020611fdd87828801611ccb565b9350506040611fee87828801611c6e565b92505060608501356001600160401b0381111561200d5761200d600080fd5b61201987828801611f83565b91505092959194509250565b6000806040838503121561203b5761203b600080fd5b6000611cf88585611c6e565b6000806040838503121561205d5761205d600080fd5b6000611dd98585611ccb565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061209357607f821691505b6020821081036120a5576120a5612069565b50919050565b602181526000602082017f4552433732313a20617070726f76616c20746f2063757272656e74206f776e658152603960f91b602082015291505b5060400190565b602080825281016106b1816120ab565b603d81526000602082017f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f81527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015291506120e5565b602080825281016106b1816120fc565b602d81526000602082017f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6581526c1c881bdc88185c1c1c9bdd9959609a1b602082015291506120e5565b602080825281016106b181612166565b80516106b181611cc2565b6000602082840312156121e0576121e0600080fd5b600061123384846121c0565b606081016121fa8286611d63565b6122076020830185611d63565b6112336040830184611cab565b80516106b181611c68565b60006020828403121561223457612234600080fd5b60006112338484612214565b6040810161224e8285611d63565b6108106020830184611cab565b604081016122698285611cab565b6108106020830184611b99565b6012815260006020820171115e1c1a5c985d1a5bdb881a5b9d985b1a5960721b815291505b5060200190565b602080825281016106b181612276565b602981526000602082017f4552433732313a2061646472657373207a65726f206973206e6f7420612076618152683634b21037bbb732b960b91b602082015291506120e5565b602080825281016106b1816122b2565b634e487b7160e01b600052601160045260246000fd5b808201808211156106b1576106b1612308565b60006106b1611bc565ffffffffffff841681565b611b9d81612331565b602081016106b18284612345565b600d81526000602082016c111bd95cdb89dd08195e1a5cdd609a1b8152915061229b565b602080825281016106b18161235c565b600061239e611f5084611f0c565b9050828152602081018484840111156123b9576123b9600080fd5b611f7b848285611c01565b600082601f8301126123d8576123d8600080fd5b8151611233848260208601612390565b6000602082840312156123fd576123fd600080fd5b81516001600160401b0381111561241657612416600080fd5b611233848285016123c4565b602681526000602082017f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015291506120e5565b602080825281016106b181612422565b601881526000602082017f4552433732313a20696e76616c696420746f6b656e20494400000000000000008152915061229b565b602080825281016106b181612475565b60128152600060208201714e616d65206e6f7420617661696c61626c6560701b8152915061229b565b602080825281016106b1816124b9565b602581526000602082017f4552433732313a207472616e736665722066726f6d20696e636f72726563742081526437bbb732b960d91b602082015291506120e5565b602080825281016106b1816124f2565b602481526000602082017f4552433732313a207472616e7366657220746f20746865207a65726f206164648152637265737360e01b602082015291506120e5565b602080825281016106b181612544565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65729101908152600061229b565b602080825281016106b181612595565b601981526000602082017f4552433732313a20617070726f766520746f2063616c6c6572000000000000008152915061229b565b602080825281016106b1816125d7565b603281526000602082017f4552433732313a207472616e7366657220746f206e6f6e20455243373231526581527131b2b4bb32b91034b6b83632b6b2b73a32b960711b602082015291506120e5565b602080825281016106b18161261b565b60208082527f4552433732313a206d696e7420746f20746865207a65726f20616464726573739101908152600061229b565b602080825281016106b18161267a565b601c81526000602082017f4552433732313a20746f6b656e20616c7265616479206d696e746564000000008152915061229b565b602080825281016106b1816126bc565b6080810161270e8287611cab565b61271b6020830186611cab565b6127286040830185611d63565b6127356060830184611d63565b95945050505050565b6080810161274c8287611cab565b6127596020830186611cab565b6127666040830185611d63565b81810360608301526127788184611c25565b9695505050505050565b80516106b181611b56565b6000602082840312156127a2576127a2600080fd5b60006112338484612782565b6001600160401b039182169190811690828203908111156106b1576106b1612308565b6001600160401b039182169190811690828201908111156106b1576106b161230856fea2646970667358221220715c63357b98471c2a6aa4963fabdeee4e98b985141ebdddd4bf3231dfc6208864736f6c63430008110033000000000000000000000000dd0bc20fb93e3033c9282e322f897fc2997f7f9298cdd1ddd8a5b13be5dc5f223f4a5838478104dfbe397f4e4c213f23f4dfc6f5